# Функции

В этой главе представлены функции Scala. 
Рассматриваемые темы включают в себя анонимные функции (лямбды), переменные в функциях
и функции высшего порядка (HOF - higher-order functions), 
в том числе способы создания собственных HOF.

[Функция высшего порядка (HOF)](https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D1%81%D1%88%D0%B5%D0%B3%D0%BE_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0) 
часто определяется как функция, 
которая принимает другие функции в качестве входных параметров или возвращает функцию в качестве ее значения. 
В Scala это возможно, потому что функции являются [объектами первого класса](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0).

Ключевые моменты, которые здесь рассматриваются:

- как писать анонимные функции в виде небольших фрагментов кода
- как передать их в десятки HOF (методов) в классах коллекций, то есть в такие методы, как `filter`, `map` и т.д.
- как с помощью этих небольших фрагментов кода и HOF создать множество функциональных возможностей 
с помощью всего лишь небольшого кода
- что функциональные переменные - это просто анонимные функции, которые привязаны к переменной
- как написать методы, которые принимают функции в качестве входных параметров
- как вернуть функцию из метода
- как объявлять сигнатуры типов для функций
- использование одинакового синтаксиса для определения параметров функций, анонимных функций и функциональных переменных


---

**Ссылки:**

- [Scala3 book](https://docs.scala-lang.org/scala3/book/fun-intro.html)
